package com.serviportales.serviquality.calificacion.beans;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.portlet.PortletRequest;

import org.apache.log4j.Logger;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;

import com.icesoft.faces.component.ext.RowSelectorEvent;
import com.liferay.portal.util.PortalUtil;
import com.liferay.util.bridges.jsf.common.FacesMessageUtil;
import com.rits.cloning.Cloner;
import com.serviportales.serviportales.beans.Contexto;
import com.serviportales.serviportales.frontController.ListHolder;
import com.serviportales.serviquality.exception.ServiqualityException;
import com.serviportales.serviquality.managers.MgrProyectoUser;
import com.serviportales.serviquality.model.Proyecto;
import com.serviportales.serviquality.model.ProyectoUser;

@ManagedBean(name = "fcProyectos", eager = true)
@ViewScoped
public class FCProyectos implements Serializable {

	private static final long serialVersionUID = 1L;

	private Logger logger = Logger.getLogger(getClass());

	// expandir filtro
	private boolean expFiltro;
	// expandir lista
	private boolean expLista;

	private ListHolder<ProyectoUser> proyectos;

	@ManagedProperty(value = "#{fcTabsProyecto}")
	private FCTabsProyecto fcTabsProyecto;
	@ManagedProperty(value = "#{fcTreeProyecto}")
	private FCTreeProyecto fcTreeProyecto;

	@PostConstruct
	public void init() {
		proyectos = new ListHolder<ProyectoUser>();

		ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
		PortletRequest portletRequest = (PortletRequest) externalContext.getRequest();

		ProyectoUser proyectoUser = new ProyectoUser();
		proyectoUser.getProyectoUserPK().setUserId(PortalUtil.getUserId(portletRequest));
		proyectoUser.getProyectoUserPK().setProyecto(new Proyecto());
		proyectos.setFilter(proyectoUser);
		traerLista();

		expFiltro = false;
		expLista = true;
	}

	public ListHolder<ProyectoUser> getProyectos() {
		return proyectos;
	}

	public void setProyectos(ListHolder<ProyectoUser> proyectos) {
		this.proyectos = proyectos;
	}

	public FCTabsProyecto getFcTabsProyecto() {
		return fcTabsProyecto;
	}

	public void setFcTabsProyecto(FCTabsProyecto fcTabsProyecto) {
		this.fcTabsProyecto = fcTabsProyecto;
	}

	public FCTreeProyecto getFcTreeProyecto() {
		return fcTreeProyecto;
	}

	public void setFcTreeProyecto(FCTreeProyecto fcTreeProyecto) {
		this.fcTreeProyecto = fcTreeProyecto;
	}

	public boolean isExpFiltro() {
		return expFiltro;
	}

	public void setExpFiltro(boolean expFiltro) {
		this.expFiltro = expFiltro;
	}

	public boolean isExpLista() {
		return expLista;
	}

	public void setExpLista(boolean expLista) {
		this.expLista = expLista;
	}

	public void traerLista() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			MgrProyectoUser mgrProyectoUser = ((MgrProyectoUser) Contexto.getApplicationContext().getBean("mgrProyectoUser"));
			proyectos.setSource(mgrProyectoUser.buscarProyectoUsersByUserActivo(proyectos.getFilter()));
		} catch (ServiqualityException serviqualityException) {
			MessageSource messageSource = Contexto.getMessageSource();
			FacesMessageUtil.error(context, messageSource.getMessage(serviqualityException.getMessage(), null, LocaleContextHolder.getLocale()));
			logger.error(serviqualityException.getMessage(), serviqualityException);
		}
	}

	public void selectedProyecto(RowSelectorEvent rowSelectorEvent) {
		if (rowSelectorEvent.isSelected()) {
			Cloner cloner = new Cloner();
			for (ProyectoUser proyectoUser : proyectos.getSource()) {
				if (proyectoUser.isSelected()) {
					fcTabsProyecto.setTabbedTreeProyectoVisible(true);
					fcTreeProyecto.setProyectoUser(cloner.deepClone(proyectoUser));
					break;
				}
			}
		} else {
			fcTabsProyecto.setTabbedTreeProyectoVisible(false);
		}
	}
}
